運算子庫:硬體平台
此運算子代表 CXP 雙接點相機與VisualApplets 之間的 影像資料介面。您可以將此運算子用於 單通道、雙通道或四通道的 CXP 介面。您可透過參數ConnectionCount 來選擇 介面類型。此運算子 會針對每個接點埠輸出原始影像資料,無論相機傳輸的格式為何。 接著,您需要將此影像資料轉換為相機傳送的格式。要轉換 影像資料,請使用適當的操作元來彙總並將原始位元組值轉換為 像素值。運作期間的某些情況可能會透過事件 系統進行通報,如下所述。 此外,此運算子還具備多種參數,用以 指示與相機的連線狀態。
| 適用於硬體平台 |
|---|
| imaFlex CXP-12 Penta |
| imaFlex CXP-12 Quad |
CXP 標準多接點定義
通常,影像像素會 從左上角依序掃描至右下角。然而,隨著現代影像感測器上的 像素數量持續增加,此種方法無法產生令人滿意的 幀率。為解決此問題,感測器製造商採取的解決方案是 同時掃描多個像素。 CXP 標準透過 引入 抽頭的概念來支援此技術。一個「tap」可視為一種掃描 裝置,用於依序讀取影像像素。影像的掃描方式 被定義為「tap 幾何結構」,主機會從 裝置中讀取此資訊。
![]() |
「點擊」功能僅適用於垂直掃描 |
|---|---|
|
點擊操作僅適用於垂直掃描。水平掃描則固定為從左至 右。 |
CXP 標準建議, 幀擷取卡主機應支援三種 tap 格式:1X-1Y、 1X-1Y2 以及1X-2YE。 取樣格式 1X-1Y代表預設的掃描特性,即 從左上角至右下角逐像素掃描影像;而其他格式則代表 兩種取樣幾何結構,如下圖所示:

雖然來自每個監聽點的資料會被整合成
獨立的資料流,但必須注意的是,
資料流識別碼與監聽點之間並無固定的對應關係。不過,可以合理假設,在資料擷取過程中,此對應關係將保持不變
。該 TapG 程式碼,以及據此用以
找出此對應關係所需的資訊,皆載於 CXP 影像標頭中,該標頭可從
選配的 MetaDataTap0/1 埠。
| 點選「格式」 | TapG 代碼 |
|---|---|
| 1X-1Y | 0x0000 |
| 1X-1Y2,接點 1 | 0x0004 |
| 1X-1Y2,接頭 2 | 0x1004 |
| 1X-2YE,按鍵 1 | 0x0041 |
| 1X-2YE,按 2 | 0x1041 |
![]() |
翻轉影像下半部並非此 運算子的職責 |
|---|---|
|
在 1X-2YE取樣格式的情況下,翻轉影像下半部並非此 CxpCameraMultiTap運算子的職責。使用者應用程式 需要透過額外的VisualApplets 運算子來重新格式化該取樣(1)。 |
在 VisualApplets 中進行實例化
該運算子在其輸出 分接端提供影像資料。此輸出始終存在。單一分接端的情況下其值為 1,而對於雙分接端相機,則需設定為 2 。除了這些標準輸出埠之外,您還可以針對每個分接端輸出 ,即針對雙接點應用,您最多可定義 2 個 MetaDataTap連接埠。在 運算子實例化過程中會出現以下彈出對話方塊,並可配置為以下組合:

圖 423。在此配置中,操作員將兩個攝影機分流皆作為 2 個獨立的 資料流,分別提供至其Tap0和Tap1埠。 營運商亦會為Tap0 埠提供元資料。此配置對於對稱式攝影機分流 配置可能具有實用價值,在此類配置中,兩條分流的 CXP 標頭在絕大部分內容上均相同,唯 TapG 碼欄位除外。
可選的 MetaDataTap 連接埠
這兩個元數據埠的格式完全相同。 該格式在VisualApplets 中以 32 位元輸出形式提供,並如以下 圖所示:

每個 CXP 幀皆提供一個對應的 無錯誤影像標頭。若影像標頭不正確,則不會將任何影像串流資料導入 VisualApplets 處理管線中。壓縮後的影像標頭由 6 個字組成。其中 最後一個位元組用於儲存附加資訊,此資訊僅供內部使用。 特別是,HeaderError 位元會指示影像標頭本身是否 存在錯誤。
| 圖片標題 | 描述 |
|---|---|
| StreamId | CXP 資料流的 ID |
| 標籤 | 16 位元原始影像索引。此索引會隨著每張傳輸的 影像而遞增,並在達到 0xFFFF 時循環回到 0。凡是 包含同一張影像相關資料的各資料流(在 多抽頭資料流的情況下),均應使用相同的索引號。 |
| XSize | 表示影像寬度(以像素為單位)的 24 位元數值。 |
| XOff | 一個 24 位元數值,表示該 影像相對於裝置完整影像最左側像素的 水平偏移量(以像素為單位)。 |
| YSize | 表示影像高度(以像素為單位)的 24 位元數值。對於線掃描影像,此值 會被設定為 0。CameraScanMode參數 始終顯示從此值讀取的相機類型。若 Tap0/Tap1 Img 通訊協定設定為 VALT_LINE1D,則處理時會忽略 YSize,且運算子 會將所有傳入資料輸出為無盡的行流。若影像 通訊協定設定為 VALT_IMAGE2D,當 YSize=0 時,同樣會產生無盡的 行流。 |
| YOff | 24 位元數值,表示影像的垂直偏移量(以像素為單位), 相對於完整裝置影像的頂部行。對於線掃描影像, 此值設定為 0。 |
| DSizeL | 24 位元數值,表示每張影像 每行所包含的資料字數。 |
| PixelF | 表示像素格式的 16 位元值。 |
| TapG | 表示抽頭幾何形狀的 16 位元數值。 |
| 旗標 | 影像旗標。 |
| x-Mirror | (尚未使用)。用以描述傳入的影像是否為 x-mirrored 或非 x-mirrored。 |
| y-Mirror | (尚未使用)。描述傳入的影像是否經過 y 軸鏡像 或未經鏡像。 |
| 標頭錯誤 |
1:影像標頭出現錯誤,且該幀被宣告為遺失。在 運算子輸出資料 流中不存在對應的影像資料。 0:影像標頭正確,且在運算子輸出資料流中 存在對應的影像資料。 |
![]() |
Image Protocol:面掃描與線掃描相機 |
|---|---|
|
對於攝影師輸出端的影像 協定而言,有兩種不同的影響因素:
CameraScanMode參數始終顯示從 CXP 標頭讀取的 相機類型。若Tap0/Tap1 影像通訊協定設定為 VALT_LINE1D,則處理時會忽略 YSize,且操作器會將所有傳入的 資料輸出為無盡的線條串流。 若影像協定設定為 VALT_IMAGE2D,當 YSize=0 時,亦會產生無盡的線條串流,導致影像尺寸超過 Tap0/Tap1 的「最大影像高度」。 超大尺寸的影像可能會導致 在設計中緊接於CxpCamera運算子之後的運算子出現未定義的行為。 為避免此情況,建議將輸入的線流分割成多個影像,例如透過使用SplitImage運算子。 |
![]() |
修改 Image Width 與 Image Height |
|---|---|
|
透過輸出連結的「最大影像寬度」與「最大影像高度」 屬性,您可以將寬度和高度調整為符合特定相機的 設定。然而,操作員埠 Tap0/Tap1 上的最大影像寬度 必須 能被該端口的並行度 。因此,請確保最大 影像寬度能被 Tap0 和 Tap1 端口的並行度整除! |
裝置資源使用情況
該運算子會根據 ConnectionCount 參數的設定,使用一個或多個 類型為CameraPort的資源。 對於事件 系統,會使用類型為 EventPort的資源。若 ConnectionCount設定為 X4(四通道),則會開啟以下資源對話方塊 :

錯誤處理與事件系統
當操作員偵測到接收到的 重建影像幀比攝影機在 CXP 影像標頭中傳遞的尺寸更大或更小時,安全電路便會啟動。此時操作員會裁切掉超出 的像素與行,以確保後續的處理流程始終處理的是 影像標頭中定義的幀尺寸。 若接收到的幀在 尺寸上小於影像標頭中指定的尺寸,操作員會使用未定義的資料填補 接收到的幀,以達到 影像標頭中定義的指定幀尺寸。填補較小的幀可能會導致後續幀 遺失。 此遺失情況會以事件形式通報給執行時軟體(Framegrabber SDK)(請參閱下一段)。尺寸不符同樣會觸發一個事件。
For a set of very critical errors, the operator will forward asynchronous events to the host runtime software (Framegrabber SDK). The event name in the Framegrabber API is <hierarchical operator name>\CxpStreamStatus, e.g. Device1\Process0\Camera\CxpStreamStatus. The event payload is provided as four 16-bit data words. The event format is defined as follows:

-
字組 [0]:
-
位元 [0:15]:發生該事件的 CXP 影像標籤。
-
-
字組 [1]:
-
位元 [8:15]:發生該事件的串流 ID。
-
位元 [0:7]:保留,視為無關位元。
-
-
字組 [2]:
-
位元 [0]:發生 CRC 錯誤。
-
位元 [1]:在影像標頭中偵測到串流標記錯誤。
-
位元 [2]:偵測到影像標頭中的錯誤,且 無法修正。
-
位元 [3]:偵測到幀大小錯誤,即 CXP 影像標頭中定義的影像大小 與 從傳輸封包中重建出的幀大小不符。此 情況通常發生在攝影機將某項資訊寫入影像標頭,但 實際傳輸的資料量卻與標頭中聲明的不一致。
-
位元 [4:15]:保留,視為無關位元。
-
-
字組 [3]:
-
位元 [0]:事件類型,0 = 實體 損毀,1 = 遺失實體。
-
損毀的實體 意指該 錯誤發生於某個幀內,且該幀已 被導入至VisualApplets 處理流程中。
-
遺失實體 意指該 錯誤發生在幀被轉發至 後續操作員之前,且該幀已被 攝影師刪除。
-
當偵測到資料實體損毀時, 處理器將根據 CXP 影像標頭定義填補該幀,以確保後續的處理器 不會引發未定義行為。 在此填補過程中, 可能會接收到新的幀,但該幀將會遺失。當攝影機傳送 的資料根據幀標籤出現缺口時,也會觸發 實體遺失事件。
-
-
位元 [1]:類型 實體 發生損毀 的事件遺失。這表示先前 類型為 「損毀實體」 已遺失。此情況 通常發生於執行時軟體未對事件作出反應,且 內部事件佇列已滿時。
-
位元 [2]:類型 已遺失 實體 發生。這表示先前 類型為 「遺失實體」 已遺失。此情況發生於 執行時軟體未對事件作出反應,且 內部事件佇列已滿時。
-
位元 [3:15]:遺失的 遺失實體 事件。
-
事件分為兩種類型:針對 損毀實體的事件,以及針對遺失實體的事件。第 3 字元的第 0 位元描述發生的是哪種 事件。若事件緩衝區已滿,可能會發生事件遺失的情況。 當標示損毀實體的事件遺失時,第 3 字元的第 1 位元將會被設定。 當 標記損毀實體的事件遺失時,第 3 字的第 1 位元將被設定; 當標記遺失實體的事件遺失時,第 3 字的第 2 位元將被設定,且第 3 至 15 位元 將提供遺失事件的數量,以指示遺失的幀。若第 2 位元被設定,但 計數器為 0,則表示發生了計數器溢出。
每個事件都會觸發一個軟體中斷。為了 減少事件數量,幾個具有相同幀標籤的事件可能會被合併 在一起。在這種情況下,某些錯誤標誌也會一併合併。如果某個事件遺失了,該遺失事件 之前的事件會包含關於該遺失事件的資訊,且無法與 之後具有相同幀標籤的事件進行合併。
因 CRC 錯誤所引發的事件會回報一個 幀標籤,該標籤未必與發生 CRC 錯誤的幀完全對應。 該幀標籤可能是前一幀或下一幀的標籤。這種情況僅會在 相機傳送包含兩個或更多幀之間轉換的 CXP 封包時發生。 CRC 計算會在封包結尾時完成,但串流資料是 即時重建的。這意味著可能會發生以下情況:在操作員已將前一幀 傳送出去之後,才偵測到 CRC 錯誤。在正常 情況下,若攝影機封包未同時包含 當前幀的結尾與下一幀的開頭資料,則發生 CRC 錯誤時 的幀標籤將始終正確。對於所有其他情況,只要完整的幀串流資料小於 8k 的最大封包大小,則單個封包內可能僅會出現 1 幀的重疊。 在此情況下,軟體應用程式應將前一幀(其 幀標籤為 -1)以及後一幀(其幀標籤為 +1)視為可能已損壞的 幀。
![]() |
區分各抽頭間的誤差事件 |
|---|---|
|
錯誤處理與事件系統在兩個 CXP 抽頭串流中均適用。請使用 stream-ID 欄位,將接收到的事件與對應的抽頭相關聯。通常,抽頭 0 會獲得較低的 stream-ID,通常為 0。抽頭 1 則會獲得一個比 抽頭 0 更大的 stream-ID。 |
| Property | Value |
|---|---|
| Operator Type | M |
| 輸出連結 | Tap0/Tap1,影像資料輸出 MetaDataTap0/MetaDataTap1,可選的元資料輸出 |
| ConnectionCount | ||||
|---|---|---|---|---|
| Type | 靜態寫入參數 | |||
| Default | X1 | |||
| Range | {X1, X2, X4} | |||
|
參數 ConnectionCount定義匯聚至 CXP 鏈路的 CXP 通道數。所使用連接埠的索引由 類型為CameraPort 的資源進行管理。 埠資源的數量應與連接數相符(例如 X2:兩個CameraPort 資源項目)。 當您實例化多個 CxpCamera運算子(例如用於雙鏡頭 小程式)時,若使用多個索引相同的 資源,或消耗的 CameraPort資源的數量超過 4 這個上限時,便可能發生資源衝突。在此情況下,設計規則檢查會回報錯誤。
|
||||
| 重設狀態 | ||||
|---|---|---|---|---|
| Type | 動態寫入參數 | |||
| Default | 關閉 | |||
| Range | {關, 開} | |||
|
參數 ResetStatus會重置攝影機的統計資料, 也就是錯誤計數器。
|
||||
| UsedConnections | ||||
|---|---|---|---|---|
| Type | 動態讀取參數 | |||
| Default | ||||
| Range | {1,2,4} | |||
|
參數 UsedConnections顯示由發現軟體在執行時 所配置的 CXP 通道數量。
|
||||
| PacketTagErrorCount | ||||
|---|---|---|---|---|
| Type | 動態讀取參數 | |||
| Default | ||||
| Range | [0 : 8191] | |||
|
參數 PacketTagErrorCount顯示有多少 已接收封包的標籤不符合 CXP 標準所規定的預期標籤。特別是,當 在後續串流封包標籤的編號中觀察到缺口時,此值會遞增。 此參數 寬度為 13 位元,其中位元 [11:0] 代表實際計數器值,而 位元 [12] 則表示計數器溢出。當溢出位元被設定時, 計數器值應視為無效。
|
||||
| ImageTagErrorCount | ||||
|---|---|---|---|---|
| Type | 動態讀取參數 | |||
| Default | ||||
| Range | [0 : 8191] | |||
|
此參數用於統計 影像標頭標籤、根據 CXP 標準所預期的標籤,以及實際接收到的標籤之間 出現多少處不匹配。 此參數寬度為 13 位元,其中位元 [11:0] 代表實際計數器值,而位元 [12] 則表示 計數器溢出。當溢出位元被設定時,計數器值應 視為無關。
|
||||
| 串流識別碼錯誤計數 | ||||
|---|---|---|---|---|
| Type | 動態讀取參數 | |||
| Default | ||||
| Range | [0 : 8191] | |||
|
此參數用以統計 流封包中接收到的流 ID 值與 影像標頭中指定的流 ID 值不匹配的次數。 此參數寬度為 13 位元,其中位元 [11:0] 代表實際計數器值,而位元 [12] 則表示 計數器溢出。當溢出位元被設定時,計數器值應 視為無關。
|
||||
| CorrectedErrorCount | |
|---|---|
| Type | 動態讀取參數 |
| Default | |
| Range | [0 : 8191] |
|
此參數用以計數在影像標頭或行標記中偵測到的 錯誤中有多少已被修正。此 參數為 13 位元寬,其中位元 [11:0] 代表實際計數器 值,而位元 [12] 則表示計數器溢出。 當溢位位元被 設定時,計數器值應被視為無關緊要。 |
|
| 未修正錯誤數 | ||||
|---|---|---|---|---|
| Type | 動態讀取參數 | |||
| Default | ||||
| Range | [0 : 8191] | |||
|
此參數用以統計在影像標頭或行標記中偵測到的 錯誤中,因同一位元組內出現多個位元錯誤而無法修正的 錯誤數量。此參數寬度為 13 位元,其中位元 [11:0] 代表實際計數器值,而位元 [12] 則表示 計數器溢出。當溢出位元被設定時,計數器值應被 視為無關緊要。
|
||||
| PacketBufferOverflowCount | ||||
|---|---|---|---|---|
| Type | 動態讀取參數 | |||
| Default | ||||
| Range | [0 : 8191] | |||
|
此參數用於統計在聚合模式下, 通道綁定中發生封包緩衝區溢位的情況次數。此 參數僅在 ConnectionCount = X2 或 X4時才適用。該參數寬度為 13 位元,其中位元 [11:0] 代表實際計數器值,而位元 [12] 則表示計數器 溢出。當溢出位元被設定時,應將計數器值視為 無關緊要。
|
||||
| PacketBufferOverflowSource | ||||
|---|---|---|---|---|
| Type | 動態讀取參數 | |||
| Default | ||||
| Range | [0x0 : 0xf] | |||
|
此參數實作了一個位元遮罩,用以 查詢在 4 個潛在的 CXP 通道中,哪一個通道發生了封包緩衝區溢出 。此參數的寬度取決於參數 ConnectionCount。在 X1 模式下,該參數的寬度為 1 位元;在 X2 模式下, 該參數寬度為 2 位元,而在 X4 模式下,參數 寬度為 4 位元。順序為:LSB = 最低 CXP 通道號,MSB = 營運商所分配的最高 CXP 通道號。
|
||||
| CameraScanMode | |
|---|---|
| Type | 動態讀取參數 |
| Default | |
| Range | {面積、線段} |
|
接收到的影像標頭包含 該影像串流是適用於區域掃描 (YSize> 0) 還是線性掃描 (YSize= 0) 應用程式的資訊。此參數顯示 最後一個有效的接收影像串流標頭資訊。 此參數僅針對 Tap0 串流進行讀取,並假設 Tap1 串流的模式與之完全相同。這 意味著此參數適用於整個相機的區域掃描或線性掃描, 因此對兩個抽頭而言均相同,並非特定於某個抽頭。 |
|
| 標記錯誤計數 | ||||
|---|---|---|---|---|
| Type | 動態讀取參數 | |||
| Default | ||||
| Range | [0 : 8191] | |||
|
此參數用於統計 CXP 串流標記與標頭或行標記的序列 出現錯誤的次數。 此參數寬度為 13 位元,其中位元 [11:0] 代表 實際計數器值,而位元 [12] 則表示計數器溢出。當 溢出位元被設定時,計數器值應視為無關緊要。
|
||||
| 意外的啟動資料 | ||||
|---|---|---|---|---|
| Type | 動態讀取參數 | |||
| Default | ||||
| Range | {false, true} | |||
|
此參數用於偵測以下錯誤 狀況:在執行「重置」操作後,第一個資料值出乎意料, 也就是說,先前並未接收到任何影像標頭。此狀況可能源於 攝影機或幀擷取卡韌體的實作存在瑕疵,或是軟體 對偵測程序的控制不當。 此外,相機的硬體故障 理論上也可能導致此類情況。
|
||||
| FrameLostCount | ||||
|---|---|---|---|---|
| Type | 動態讀取參數 | |||
| Default | ||||
| Range | [0 : 33554431] | |||
|
此參數用於統計在擷取過程中 遺失且未傳送至VisualApplets 處理流程的影像幀。 當偵測到影像標頭中的錯誤,或當某個影像幀 與另一個影像幀重疊時,該影像幀即會遺失。此參數寬度為 25 位元,其中位元 [23:0] 代表實際計數器值,而位元 [24] 則表示計數器 溢出。當溢出位元被設定時,計數器值應被視為 無關緊要。
|
||||
| FrameCorruptedCount | ||||
|---|---|---|---|---|
| Type | 動態讀取參數 | |||
| Default | ||||
| Range | [0 : 33554431] | |||
|
此參數用於統計擷取過程中出現的 損壞幀。損壞幀是指含有錯誤像素的幀,這些幀 會被傳送至VisualApplets 處理管線。 此參數寬度為 25 位元,其中 位元 [23:0] 代表實際計數器值,而位元 [24] 則表示 計數器溢出。當溢出位元被設定時,計數器值應 視為無關。
|
||||
以下範例展示了 CxpCameraMultiTap 運算子的使用方式:
-
Functional Examples for Multi Tap Camera Interface with Tap Geometry Sorting
範例 - operator 使用方式示範

![[注意]](../common/images/admon/note.png)





![[重要]](../common/images/admon/important.png)

上一頁

